https://github.com/ted59438/EnglishVocabulary_MySQL
https://dev.mysql.com/downloads/windows/visualstudio/
https://downloads.mysql.com/archives/c-net/
C# 連接 MySQL 需要 MySQL 提供的DLL Library
產生完後,就可以透過產生出來的物件類別,以ORM的方式來進行資料操作
Object Relational Mapping, ORM,一種將關聯式資料庫轉換對應成為物件的抽象化技術,好處是可以讓開發者直接使用物件導向方式對資料庫進行操作
Entity Framework 是 C# 的 ORM 框架
延伸閱讀:
https://dotblogs.com.tw/dog0416/2016/06/12/030240
https://blog.miniasp.com/post/2009/03/02/Entity-Framework-Quick-Start-and-Leaning-Resources
將DB Playground的所有與資料庫互動的Raw SQL操作方式改成ORM的操作方式
改寫後的專案檔案架構:
EF_Model.VocabularyEntity entity = new EF_Model.VocabularyEntity();
// 取得所有學生實體
EF_Model.student[] students = entity.student.ToArray();
// 顯示所有學生資訊
queryResultGrid.Rows.Clear();
foreach (EF_Model.student item in students)
{
int newRowIndex = queryResultGrid.Rows.Add();
queryResultGrid.Rows[newRowIndex].Cells["StudentID"].Value = item.StudentID;
queryResultGrid.Rows[newRowIndex].Cells["Username"].Value = item.Username;
queryResultGrid.Rows[newRowIndex].Cells["RealName"].Value = item.RealName;
queryResultGrid.Rows[newRowIndex].Cells["Birthdate"].Value = item.Birthdate.GetValueOrDefault().ToString("yyyy-MM-dd");
}
(1) 新增實體物件
Student student = new Student()
(2) 設定實體物件的欄位值
student.RealName = "泰D"
(3) 加到實體
entity.Student.add(student)
(4) 儲存並寫入DB
entity.SaveChanges()
// 新增學生實體
EF_Model.student insertStudent = getStudentFromField(true);
entity.student.Add(insertStudent);
try
{
// 將新增的學生實體寫入資料庫
entity.SaveChanges();
queryStudentBtn.PerformClick();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "錯誤", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
/// <summary>
/// 取得選擇的學生實體
/// </summary>
/// <returns></returns>
private EF_Model.student getStudentFromField(bool isAppend)
{
EF_Model.student student;
// 取得存在的學生實體 (用於修改、刪除)
if (queryResultGrid.CurrentRow != null && !isAppend)
{
string currentStudentID = queryResultGrid.CurrentRow?.Cells["StudentID"].Value.ToString();
student = entity.student.Where(item => item.StudentID == currentStudentID)
.FirstOrDefault();
}
// 產生新的學生實體 (用於新增)
else
{
student = new EF_Model.student();
student.StudentID = Guid.NewGuid().ToString();
student.Password = SHAEncrypt(studentPasswordTextBox.Text);
}
student.RealName = studentNameTextBox.Text;
student.Birthdate = studentBirthdatePicker.Value;
student.Username = studentUsernameTextBox.Text;
return student;
}
(1)取得實體
student = entity.student.Where(item => item.StudentID == currentStudentID
.FirstOrDefault();)
(2) 修改屬性值
student.RealName = "泰D"
(3) 儲存並寫入DB
entity.SaveChanges()
// 修改學生實體
EF_Model.student editStudent = getStudentFromField(false);
try
{
// 將更新後的實體資料寫入資料庫
entity.SaveChanges();
queryStudentBtn.PerformClick();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "錯誤", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
(1) 取得實體
student = entity.student.Where(item => item.StudentID == currentStudentID)
.FirstOrDefault();
(2) 從所有實體中移除
entity.Student.Remove(student)
(3) 更新實體
entity.SaveChanges()
// 從所有學生實體當中移除學生
EF_Model.student student = getStudentFromField(false);
entity.student.Remove(student);
try
{
// 將移除實體後的學生資訊更新至資料庫
entity.SaveChanges();
queryStudentBtn.PerformClick();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "錯誤", MessageBoxButtons.OK, MessageBoxIcon.Error);
}